//引入axios:添加请求、响应拦截器
import axios, { type AxiosResponse } from 'axios';
//消息提示组件
import { ElMessage, ElMessageBox } from 'element-plus';
//引入大仓库
import pinia from '@/stores/index';
//用户相关的小仓库
import { useUserInfoStore } from '../stores/userInfo';
// serverConfig.json是一个JSON格式的配置文件，用于存储服务器的配置信息
// import serverConfig from "@/serverConfig.json";
import serverConfig from "../../serverConfig.json"
import { useRoute } from "vue-router";
import router from '@/router';
const route = useRoute();
// 在组件中访问配置信息


/* 定义response对象的data接口 */
// interface ResponseData<T> {
// 	code: number;
// 	data: T;
// 	message: string;
// }

//创建Axios实例
// 配置新建一个 axios 实例
const service = axios.create({
	baseURL: `http://${serverConfig.server.ip}:${serverConfig.server.port}${serverConfig.server.apiPath}`,
	

	


	timeout: 60000
});

// 添加请求拦截器
service.interceptors.request.use(
	(config) => {
		// 从本地读取AccessToken、TokenType
		const token = sessionStorage.getItem('AccessToken');
		const TokenType = sessionStorage.getItem('TokenType');
		// 判断token是否有值
		if (token) {
			// config对象的headers属性可能为undefined
			if (!config.headers) {
				config.headers = {};
			}
			// 在请求头中携带'Access-Control-Allow-Origin': '*'和'Content-Type': 'application/json'
			config.headers['Access-Control-Allow-Origin'] = '*';
			config.headers['Content-Type'] = 'application/json';
			// 在请求头中携带'TokenType'和'token'
			config.headers.Authorization = `${TokenType} ${token}`;
		}
		return config;
	}, error => {
		// 对请求错误做些什么
		console.log(error);

		return Promise.reject(error);
	}
);

// 添加响应拦截器
service.interceptors.response.use(


	/* 约束一下response */
	async (response) => {

		if (response.status !== 200) {
			// 统一的错误提示
			ElMessage({
				message: (typeof response.status == 'string' && response.data) || 'Error',
				type: 'error',
				duration: 5 * 1000
			})
			// `token` 过期或者账号已在别处登录
			if (response.status === 401) {


				// const storeUserInfo = useUserInfoStore(pinia)
				// await storeUserInfo.reset()
				// window.location.href = '/login' // 去登录页
				router.push({ path: '/login' })
				// ElMessageBox.alert('你已被登出，请重新登录', '提示', {})
				// 	.then(() => { })
				// 	.catch(() => { })
				console.log('你已被登出，请重新登录');

			}
			return Promise.reject(service.interceptors.response);
		} else {
			return response.data; /* 返回成功响应数据中的data属性数据 */
		}
	},
	//统一处理请求错误
	(error) => {
		if (error.response.status === 401) {
			sessionStorage.clear()
			router.push({ path: '/login' })
		}
		// 对响应错误做点什么
		if (error.message.indexOf('timeout') != -1) {
			ElMessage.error('网络超时');
		} else if (error.message == 'Network Error') {
			ElMessage.error('网络连接错误');
		} else {
			if (error.response.data) ElMessage.error(error.response.statusText);

		}
		return Promise.reject(error);
	}
);

export default service;
